HBase中的行是按照RowKey字典序排序的。
这里的“加盐”与密码学中的“加盐”不是一回事。
以手机号为例,手机号的前缀变化比较少(如152、185等),但后半部分变化很多。
这个操作严格来讲不算“打散”,但可以调整数据的时间排序。
在HBase中,RowKey、列族、列名等都是以byte[]形式传输的。
我们的业务中,有一部分是用户在日历上记录自己的行为。需要储存在RowKey中的维度有:用户ID(uid,不会超过十亿)、日历上的日期(date,yyyyMMdd格式)、记录行为的类型(type,0~99之间)。记录的详细数据则存储在列f:data中。根据查询逻辑,我们设计的RowKey格式如下:
9~79809782~05~0008839540
uid.toString().hashCode() % 10
99999999 - date
StringUtils.leftPad(type, 2, "0")
StringUtils.leftPad(uid, 10, "0")
create 'user_calendar_record', {
NAME => 'f',
VERSIONS => '1',
BLOCKCACHE => 'true',
BLOCKSIZE => '65536',
BLOOMFILTER => 'row',
COMPRESSION => 'SNAPPY'
}, {
SPLITS => ['1', '2', '3', '4', '5', '6', '7', '8', '9']
}
文章不错?点个【在看】吧! 👇